#pragma once

#include "GkContextInterface.h"

namespace gk
{
	struct ContextGenericDeferred : public ContextInterface
	{
		void BeginFrame()
		{
		}

		void EndFrame()
		{
		}

		void SetRenderTarget(RenderTargetHandle hRenderTarget)
		{
		}

		void ClearRenderTarget(ClearType::Enum clearType, float r, float g, float b, float a, float depth, cr::uint8_t stencil)
		{
		}

		void SetRenderBinding(RenderBindingHandle hRenderBinding)
		{
		}

		void DrawIndexedPrimitives(BufferHandle hIndexBuffer, PrimitiveType::Enum primitiveType, cr::size_t indexCount, cr::size_t startIndex, cr::size_t vertexCount, cr::size_t startVertex)
		{
		}

		void DrawPrimitives(PrimitiveType::Enum primitiveType, cr::size_t startVertex, cr::size_t numVertices)
		{
		}

		void BeginGpuProgram(GpuProgramHandle hGpuProgram)
		{
		}

		void EndGpuProgram()
		{
		}

// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, float v)
// 		{
// 		}
// 
// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, float* v, cr::size_t numComponents)
// 		{
// 		}
// 
// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, int v)
// 		{
// 		}
// 
// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, int* v, cr::size_t numComponents)
// 		{
// 		}
// 
// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, cr::Vec4fRef v)
// 		{
// 		}
// 
// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, cr::Vec4f* v, cr::size_t numComponents)
// 		{
// 		}
// 
// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, cr::Matrix4fRef v)
// 		{
// 		}
// 
// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, cr::Matrix4f* v, cr::size_t numComponents)
// 		{
// 		}
// 
// 		void SetGpuProgramParameter(GpuProgramParameterHandle hParam, TextureHandle hTexture)
// 		{
// 		}

		void CommitConstantBuffer(ConstantBufferHandle hConstantBuffer)
		{
		}

		void CommitGpuProgram()
		{
		}

		void CommitStateBlock(StateBlockHandle hStateBlock)
		{

		}
	};

	typedef cr::Handle<ContextGenericDeferred> ContextGenericDeferredHandle;
}